<!doctype html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>CSS Regions: Removing content nodes on mouse events</title>
	<link rel="author" title="Mihai Balan" href="mailto:mibalan@adobe.com">
	<link rel="help" href="http://www.w3.org/TR/css3-regions/#the-flow-into-property">
	<link rel="help" href="http://www.w3.org/TR/css3-regions/#the-flow-from-property">
	<meta name="assert" content="Altering the contents of the named flow via DOM manipulation in response to user gestures (mouse move, mouse click) should works as without regions.">
	<meta name="flags" content="dom interact">

	<style>
	body {
		margin: 0;
		padding: 20px;
	}
	p {
		margin: 0;
	}
	.box {
		width: 200px;
		height: 200px;
		float: left;
		margin: 20px;
	}
	#content {
		background-color: red;
	}
	#content p {
		width: 100%;
		height: 100px;
		flow-into: flow;
	}
	#region {
		background-color: yellow;
		flow-from: flow;
	}
	#region p {
		margin-top: 100px;
		width: 100%;
		height: 100px;
		background-color: red;
	}
	#result {
		clear: both;
		font-weight: bold;
	}
	.pass {
		color: green;
	}
	.fail {
		color: red;
	}

	.phase0 {
		background-color: green;
	}
	.phase1 {
		background-color: seagreen;
	}
	.phase2 {
		background-color: lime;
	}
	.phase3 {
		background-color: lightgreen;
	}
	</style>
</head>
<body>
	The test fails if you see any red, the text "FAIL" below the two rectangles below or if any of the expected results below don't happen.
	<ol>
		<li>You should see a green and a yellow rectangle, stacked vertically.</li>
		<li>Move the mouse over the green rectangle. <strong>Expected: </strong>The color should change to a lighter green.</li>
		<li>Click in the green rectangle. <strong>Expected: </strong>The color should change again to a yet lighter green.</li>
		<li>Move the mouse over the yellow rectangle.</li>
		<li><strong>Expected: </strong>The color of the green rectangle should change yet again to a pale green. There should be a green text below that says "PASS".</li>
	</ol>
	<div id="content">
		<p class="phase0"></p>
	</div>
	<div id="region" class="box">
		<p></p>
	</div>
	<div id="result"></div>
	<script type="text/javascript">
	var events = [ { 
				name: "mouseover",
				hit: false
			}, { 
				name: "click",
				hit: false
			}, { 
				name: "mouseout",
				hit: false
			} ],
		target = document.querySelector("#content"),
		callCount = 0;

	function setResult(value) {
		var tag = document.querySelector("#result");
		tag.innerHTML = value;
		tag.classList.add(value.toLowerCase());
	}

	function finishTest() {
		if (window.testRunner) {
			testRunner.notifyDone();
		}
	}
	
	function handlerForEvent(eventName, index) {
		return function(evt) {
			if ((evt.target === evt.currentTarget) || (events[index].hit))
				return;

			callCount++;
			events[index].hit = true;

			var nodeToRemove = document.querySelector("#content p"),
				nodeParent = nodeToRemove.parentNode;

			nodeParent.removeChild(nodeToRemove);
			document.body.offsetTop;

			var newNode = document.createElement("p");
			newNode.classList.add("phase" + callCount);
			nodeParent.appendChild(newNode);

			if (callCount == 3) {
				setResult("PASS");
				finishTest();
			}
		}
	}

	function runScript() {
		if (window.testRunner) {
			testRunner.dumpAsText();
			testRunner.waitUntilDone();

			var boxLocation = document.querySelector("#region").getBoundingClientRect();
			eventSender.mouseMoveTo(boxLocation.left + 40, boxLocation.top + 50);
			eventSender.mouseDown();
			eventSender.mouseUp();

			eventSender.mouseMoveTo(boxLocation.left + boxLocation.width - 40, boxLocation.top + boxLocation.height - 40);
			eventSender.mouseDown();
			eventSender.mouseUp();
		}
	}
	
	events.forEach(function(item, index) {
		target.addEventListener(item.name, handlerForEvent(item, index));
	});

	runScript();
	</script>
</body>
</html>